package com.forever7776.life.core.service.blog;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.forever7776.life.core.common.vo.*;
import com.forever7776.life.core.entity.blog.Blog;
import com.forever7776.life.core.entity.blog.BlogExt;
import com.forever7776.life.remote.common.vo.ResultVO;

import java.util.List;

/**
 * <p>
 * 博客主表 服务类
 * </p>
 *
 * @author kz
 * @since 2018-02-11
 */
public interface IBlogService extends IService<Blog> {


    /**
     * 查询最多5条博客，首页轮播使用
     *
     * @return
     */
    Page<Blog> selectCarouselBlogs(Page<Blog> page);

    /**
     * 根据博客类型ID查询数据
     *
     * @param blogTypeId
     * @return
     */
    List<Blog> selectByBlogTypeId(String blogTypeId);

    /**
     * 查询博客活跃用户排行榜
     *
     * @return
     */
    List<UserBaseInfoVO> selectBlogActiveUser(Integer limit);


    /**
     * 根据条件查询5条博客数据
     *
     * @param type
     * @param blogTypeId
     * @return
     */
    List<UserBlogVO> selectUserBlogByCondition(Integer blogId, Integer type, Integer blogTypeId);

    /**
     * 后台管理系统查询博客数据
     *
     * @param page
     * @param vo
     * @return
     */
    Page<UserBlogVO> selectAllUserBlogByAdmin(Page<UserBlogVO> page, UserBlogAdminSearchVO vo);

    /**
     * 前端博客页面查询博客数据
     *
     * @param page
     * @param type
     * @param blogTypeId
     * @return
     */
    Page<UserBlogVO> selectAllUserBlogByFront(Page<UserBlogVO> page, Integer type, Integer blogTypeId, String userId);

    /**
     * 查询用户博客列表
     *
     * @param page
     * @param searchVO
     * @return
     */
    Page<Blog> selectAll(Page<Blog> page, UserBlogSearchVO searchVO);

    /**
     * 根据用户ID和博客ID查询一条
     *
     * @param userId
     * @param id
     * @return
     */
    Blog selectByUserId(String userId, Integer id);

    /**
     * 查询用户博客数量
     *
     * @param userId
     * @return
     */
    Integer selectCount(String userId);


    /**
     * 保存编辑博客
     *
     * @param blog
     * @param blogExt
     * @return
     */
    ResultVO edit(Blog blog, BlogExt blogExt);

    /**
     * 创建博客
     *
     * @param blog
     * @param blogExt
     * @return
     */
    ResultVO save(Blog blog, BlogExt blogExt);

    /**
     * 删除（假删除，修改状态为-1）
     *
     * @param id
     * @return
     */
    ResultVO delete(Integer id);

    /**
     * 修改博客审核状态
     *
     * @param blogId
     * @param type
     * @return
     */
    Integer updateType(Integer blogId, Integer type);


    /**
     * 推荐博客
     *
     * @param blogId
     * @param recommendType
     * @return
     */
    Integer updateRecommendType(Integer blogId, Integer recommendType);

    /**
     * 修改博客是否开放状态
     *
     * @param userId
     * @param blogId
     * @param openup
     * @return
     */
    Integer updateOpenUp(String userId, Integer blogId, Integer openup);

    /**
     * 查看博客详情，查看用户最新一条博客数据，不包括正在查看的博客
     *
     * @param userId
     * @param blogId
     * @return
     */
    UserLastBlogVO selectUserLastBlog(String userId, Integer blogId);

    /**
     * 查看博客详情，查看5条热门博客
     *
     * @param blogId
     * @return
     */
    List<UserBlogBaseVO> selectFiveHotBlog(Integer blogId);

    /**
     * 根据博客审核状态查询数量
     *
     * @param type
     * @return
     */
    Integer selectCountByBlogType(Integer type);
}
